package zhang_wei_huan;
/*
*
*队列
*  队列遵循先进先出的原理，在队尾添加元素，在对头删除元素
* */
public class ZHANG_WEI_HUAN_23_Q2 {

    public class ArrayQueue {

        private int[] arr;//定义数组
        private int capacity;
        // 进队列使用的索引
        private int tail;
        // 出队列使用的索引
        private int head;
        // 队列中元素的个数
        private int len;

        public ArrayQueue(int size) {
            arr = new int[size];
            capacity = arr.length;
            tail = 0;
            head = 0;
            len = 0;
        }

        public int inQueue(int e) {//入队
            if (!isFull(arr)) {//如果数组不为零，
                arr[tail++ % capacity] = e;//数组下标右移
                len++;
                return e;
            } else {
                System.out.print("队列已满");
                return -1;
            }
        }

        public int outQueue() {//出队
            if (!isEmpty(arr)) {//判断数组是否为空，为空则
                int outElement = arr[head % capacity];
                arr[head++ % capacity] = 0;
                len--;
                return outElement;
            } else {
                System.out.println("队列无元素");
                return -1;
            }
        }

           //判断数组是否为空
        public boolean isEmpty(int[] arr) {
            return arr.length == 0;
        }
          //判断数组是否已满
        public boolean isFull(int[] arr) {
            return len == capacity;
        }
        //实现方法的构造器
        public int getCapacity() {
            return capacity;
        }

        public int getLen() {
            return len;
        }
          //打印输出数组
        public void printArr() {
            for (int i = 0; i < capacity; i++) {
                System.out.print(arr[i] + "\t");
            }
            System.out.println();
        }
    }

}
